### Design principles used

While this is a simple coffee machine example, it uses a state machine implemented by having a simple enum with states that decides for itself, based on an input, what next state to go to. This design follows something called "Command-query separation" (CQS), which basically tells that queries and commands have separate intents and should therefore be separate. A query should not modify the state. This design is super easy to work with, even better for debugging. Queries that concern the coffeemachine are done via the machine, states are explicitly set by the state enum, based on requests made to the machine via the IInput interface.

#### Links

This idea is heavily based on the work of this friendly guy, all credit goes to him or her:
[MIRKOSERTIC.DE - Implementing State Machines with Java Enums](https://www.mirkosertic.de/blog/2013/04/implementing-state-machines-with-java-enums/)

Read more about CQS on Wikipedia:
[Wikipedia - Command-query separation](https://en.wikipedia.org/wiki/Command%E2%80%93query_separation)
